Perspectief 2 – Beperkte impact van EV‑adoptie#
Dit hoofdstuk bekijkt in hoeverre de huidige adoptie van elektrische voertuigen (EV’s) niet altijd resulteert in een uniforme of significante daling van de CO₂‑uitstoot van nieuw geregistreerde auto’s.
We presenteren twee visualisaties:
Lijngrafiek – Evolutie van CO₂‑uitstoot per land (2013‑2023)
Interactieve kaart – EV‑aandeel per land met jaarslider
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from IPython.display import HTML
%matplotlib inline
cars = pd.read_csv('data/cars_by_fuel.csv')
co2 = pd.read_csv('data/co2_new_cars.csv')
tmp = {}
for _, r in cars.iterrows():
key = f"{r.geo}-{r.TIME_PERIOD}"
tmp.setdefault(key, {'geo': r.geo, 'year': int(r.TIME_PERIOD),
'elc': 0, 'total': 0})
if r.mot_nrg == 'ELC':
tmp[key]['elc'] = r.OBS_VALUE
elif r.mot_nrg == 'TOTAL':
tmp[key]['total'] = r.OBS_VALUE
for _, r in co2.iterrows():
key = f"{r.geo}-{r.TIME_PERIOD}"
if key in tmp:
tmp[key]['co2'] = r.OBS_VALUE
df = (pd.DataFrame(tmp.values())
.dropna(subset=['co2'])
.assign(evShare=lambda d: d.elc / d.total * 100))
focus_codes = ['NL','DE','NO','PL','FR','ES']
focus = df[df.geo.isin(focus_codes)]
Visualisatie 2.1 – Evolutie CO₂‑uitstoot per land#
fig_line = px.line(focus, x='year', y='co2', color='geo',
title='Gem. CO₂‑uitstoot nieuwe auto’s (2013‑2023)',
labels=dict(year='Jaar', co2='CO₂ (g/km)', geo='Land'))
fig_line.update_traces(mode='lines+markers')
# Convert to HTML and display
html_str = fig_line.to_html(include_plotlyjs=True, div_id="co2-evolution-plot")
HTML(html_str)
Opvallend is dat alleen Noorwegen een scherpe daling laat zien; andere landen tonen een gematigder of wisselend patroon.
Visualisatie 2.2 – EV‑aandeel per land (choropleth met slider)#
iso_map = {'AT':'AUT','BE':'BEL','BG':'BGR','HR':'HRV','CY':'CYP','CZ':'CZE','DK':'DNK','EE':'EST',
'FI':'FIN','FR':'FRA','DE':'DEU','EL':'GRC','HU':'HUN','IE':'IRL','IT':'ITA','LV':'LVA',
'LT':'LTU','LU':'LUX','MT':'MLT','NL':'NLD','PL':'POL','PT':'PRT','RO':'ROU','SK':'SVK',
'SI':'SVN','ES':'ESP','SE':'SWE','NO':'NOR','IS':'ISL','CH':'CHE','UK':'GBR'}
df['iso3'] = df.geo.map(iso_map)
rows = df.dropna(subset=['iso3'])
years = sorted(rows.year.unique())
zmax = rows.evShare.quantile(0.98)
frames = []
for yr in years:
sub = rows[rows.year == yr]
frames.append(go.Frame(name=str(yr),
data=[go.Choropleth(locations=sub.iso3,
z=sub.evShare,
text=sub.geo,
colorscale='Viridis',
zmin=0, zmax=zmax,
hovertemplate='%{text}: %{z:.2f}%<extra></extra>')]))
fig_map = go.Figure(
data=frames[0].data,
frames=frames,
layout=go.Layout(
title=f'EV‑aandeel per land ({years[0]})',
geo=dict(scope='europe', projection_type='natural earth',
showframe=False, showcountries=True),
sliders=[dict(steps=[dict(method='animate', label=str(y),
args=[[str(y)], dict(mode='immediate',
frame=dict(duration=500, redraw=False),
transition=dict(duration=300))])
for y in years],
currentvalue=dict(prefix='Jaar: '),
pad=dict(t=30))]
))
# Convert to HTML and display
html_str = fig_map.to_html(include_plotlyjs=True, div_id="ev-map-plot")
HTML(html_str)
De kaart laat zien dat de hoge EV‑penetratie vrijwel exclusief is voor Noorwegen (en in mindere mate Nederland), terwijl een groot deel van Europa onder de 5 % blijft. Dat verklaart waarom de totale CO₂‑daling in vis. 2.1 beperkt is.